<?php
	class Associacoes {
		private $idCurso;
		private $idElemento;
		private $elemento;
		private $associacoes;
		private $nomeModuloCurso;
		
		public function Associacoes($idCurso, $idElemento, $elemento, $urlCurso, $nomeModuloCurso) {
			$strQuery	=	"SELECT * FROM associacoes WHERE idCurso = " . $idCurso . " AND (idElemento1 = " . $idElemento . " AND elemento1 = \"" . $elemento . "\") OR (idElemento2 = " . $idElemento . " AND elemento2 = \"" . $elemento . "\")";
			
			if (is_array($resultado = BancoDados::query($strQuery))) {
				$this->setIdCurso($idCurso);
				$this->setIdElemento($idElemento);
				$this->setElemento($elemento);
				$this->setNomeModuloCurso($nomeModuloCurso);
				
				$arrayAssociacoes	=	array();
				$arrayAssociacoes[texto('AREA_AVISOS')]			=	array();
				$arrayAssociacoes[texto('AREA_GLOSSARIO')]		=	array();
				$arrayAssociacoes[texto('AREA_BIBLIOGRAFIA')]	=	array();
				$arrayAssociacoes[texto('AREA_LINKS')]			=	array();
				$arrayAssociacoes[texto('AREA_ATIVIDADES')]		=	array();
				$arrayAssociacoes[texto('AREA_FORUM')]			=	array();
				$arrayAssociacoes[$nomeModuloCurso]				=	array();
				
				foreach ($resultado as $chave => $associacao) {
					$arrayAssociacao	=	array();
					if ($associacao['idElemento1'] == $this->getIdElemento() && $associacao['elemento1'] == $this->getElemento()) {
						//Adicionar o elemento 2 no array de associacoes
						$arrayAssociacao['idElemento']	=	$associacao['idElemento2'];
						$arrayAssociacao['elemento']	=	$associacao['elemento2'];
					}
					else {
						//Adicionar o elemento 1 no array de associacoes
						$arrayAssociacao['idElemento']	=	$associacao['idElemento1'];
						$arrayAssociacao['elemento']	=	$associacao['elemento1'];
					}
					
					$tabela			=	"";
					$colunaTitulo	=	"";
					$colunaIdItem	=	"";
					$nomeExibicao	=	"";
					
					switch ($arrayAssociacao['elemento']) {
						case 'avisos':
							$tabela			=	'avisos';
							$colunaIdItem	=	'idAviso';
							$colunaTitulo	=	'titulo';
							$nomeExibicao	=	'AREA_AVISOS';
							break;
						case 'glossarios':
							$tabela			=	'glossarios';
							$colunaIdItem	=	'idGlossario';
							$colunaTitulo	=	'termo';
							$nomeExibicao	=	'AREA_GLOSSARIO';
							break;
						case 'bibliografias':
							$tabela			=	'bibliografias';
							$colunaIdItem	=	'idBibliografia';
							$colunaTitulo	=	'item';
							$nomeExibicao	=	'AREA_BIBLIOGRAFIA';
							break;
						case 'links':
							$tabela			=	'links';
							$colunaIdItem	=	'idLink';
							$colunaTitulo	=	'titulo';
							$nomeExibicao	=	'AREA_LINKS';
							break;
						case 'recursos':
							$tabela			=	'recursos';
							$colunaIdItem	=	'idRecurso';
							$colunaTitulo	=	'titulo';
							$nomeExibicao	=	'AREA_RECURSOS';
							break;
						case 'modulos':
							$tabela			=	'modulos';
							$colunaIdItem	=	'idModulo';
							$colunaTitulo	=	'titulo';
							$nomeExibicao	=	$nomeModuloCurso;
							break;
						case 'atividades':
							$tabela			=	'atividades';
							$colunaIdItem	=	'idAtividade';
							$colunaTitulo	=	'titulo';
							$nomeExibicao	=	'AREA_ATIVIDADES';
							break;
						case 'foruns':
							$tabela			=	'foruns';
							$colunaIdItem	=	'idForum';
							$colunaTitulo	=	'titulo';
							$nomeExibicao	=	'AREA_FORUM';
							break;
					}
					
					$strQuery	=	"SELECT " . $colunaTitulo . " FROM " . $tabela . " WHERE " . $colunaIdItem . " = " . $arrayAssociacao['idElemento'];
					if (is_array($resultadoItem = BancoDados::query($strQuery))) {
						if (sizeof($resultadoItem) > 0) {
							$arrayAssociacao['titulo']	=	$resultadoItem[0][$colunaTitulo];
						}
						else {
							$this->setIdCurso(null);
						}
					}
					else {
						$this->setIdCurso(null);
					}
					
					$arrayAssociacao['dataHora']	=	$associacao['dataHora'];
					$arrayAssociacao['idUsuario']	=	$associacao['idUsuario'];
					switch ($arrayAssociacao['elemento']) {
						case 'avisos':
							$arrayAssociacao['url']			=	montaLink(array('curso', $urlCurso, 'comunicacao', 'avisos',$arrayAssociacao['idElemento']));
							break;
						case 'glossarios':
							$arrayAssociacao['url']			=	montaLink(array('curso', $urlCurso, 'consulta', 'glossario', $arrayAssociacao['idElemento']));
							break;
						case 'bibliografias':
							$arrayAssociacao['url']			=	montaLink(array('curso', $urlCurso, 'consulta', 'bibliografia', $arrayAssociacao['idElemento']));
							break;
						case 'links':
							$arrayAssociacao['url']			=	montaLink(array('curso', $urlCurso, 'consulta', 'links', $arrayAssociacao['idElemento']));
							break;
						case 'recursos':
							$arrayAssociacao['url']			=	montaLink(array('curso', $urlCurso, 'recursos', $arrayAssociacao['idElemento']));
							break;
						case 'modulos':
							$arrayAssociacao['url']			=	montaLink(array('curso', $urlCurso, 'modulo', $arrayAssociacao['idElemento']));
							break;
						case 'atividades':
							$arrayAssociacao['url']			=	montaLink(array('curso', $urlCurso, 'atividades', $arrayAssociacao['idElemento']));
							break;
						case 'foruns':
							$arrayAssociacao['url']			=	montaLink(array('curso', $urlCurso, 'comunicacao','forum', $arrayAssociacao['idElemento']));
							break;
					}
					if ($arrayAssociacao['elemento'] == 'modulos') {
						if (!isset($arrayAssociacoes[$nomeExibicao]) || !is_array($arrayAssociacoes[$nomeExibicao])) {
							$arrayAssociacoes[$nomeExibicao]	=	array();
						}
						array_push($arrayAssociacoes[$nomeExibicao], $arrayAssociacao);
					}
					else {
						if (!isset($arrayAssociacoes[texto($nomeExibicao)]) || !is_array($arrayAssociacoes[texto($nomeExibicao)])) {
							$arrayAssociacoes[texto($nomeExibicao)]	=	array();
						}
						array_push($arrayAssociacoes[texto($nomeExibicao)], $arrayAssociacao);
					}
				}
				$this->setAssociacoes($arrayAssociacoes);
			}
			else {
				$this->setIdCurso(null);
			}
		}
		
		public function criarAssociacao ($idElemento2, $elemento2, $idUsuario) {
			if (is_numeric($idElemento2)) {
				$tabelaElemento2 = '';
				
				switch ($elemento2) {
					case texto('AREA_AVISOS'):
						$tabelaElemento2	=	'avisos';
						break;
					case texto('AREA_GLOSSARIO'):
						$tabelaElemento2	=	'glossarios';
						break;
					case texto('AREA_BIBLIOGRAFIA'):
						$tabelaElemento2	=	'bibliografias';
						break;
					case texto('AREA_LINKS'):
						$tabelaElemento2	=	'links';
						break;
					case texto('AREA_RECURSOS'):
						$tabelaElemento2	=	'recursos';
						break;
					case $this->getNomeModuloCurso():
						$tabelaElemento2	=	'modulos';
						break;
					case texto('AREA_ATIVIDADES'):
						$tabelaElemento2	=	'atividades';
						break;
					case texto('AREA_FORUM'):
						$tabelaElemento2	=	'foruns';
						break;
				}
				
				if ($tabelaElemento2 != '') {
					if (!$this->verificaAssociacao($idElemento2, $tabelaElemento2)) {
						$strQuery	=	"INSERT INTO associacoes VALUES (";
						$strQuery	.=	$this->getIdCurso() . ", ";
						$strQuery	.=	$this->getIdElemento() . ", ";
						$strQuery	.=	"\"" . $this->getElemento() . "\", ";
						$strQuery	.=	$idElemento2 . ", ";
						$strQuery	.=	"\"" . $tabelaElemento2 . "\", ";
						$strQuery	.=	"NOW(), ";
						$strQuery	.=	$idUsuario . ")";
						
						return BancoDados::query($strQuery);
					}
					else {
						return -1;
					}
				}
				else {
					return false;
				}
			}
			else {
				return false;
			}
		}
		
		public function verificaAssociacao ($idElemento2, $elemento2) {
			if ($this->getIdElemento() != $idElemento2 || $this->getElemento() != $elemento2) {
				$strQuery	=	"SELECT COUNT(*) as qtdAssociacoes FROM associacoes WHERE idCurso = " . $this->getIdCurso() . " AND (idElemento1 = " . $this->getIdElemento() . " AND idElemento2 = " . $idElemento2 . " AND elemento1 = \"" . $this->getElemento() . "\" AND elemento2 = \"" . $elemento2 . "\") OR (idElemento2 = " . $this->getIdElemento() . " AND idElemento1 = " . $idElemento2 . " AND elemento2 = \"" . $this->getElemento() . "\" AND elemento1 = \"" . $elemento2 . "\")";
				if (is_array($resultado = BancoDados::query($strQuery))) {
					if (sizeof($resultado) > 0) {
						if ($resultado[0]['qtdAssociacoes'] == 0) {
							return false;
						}
						else {
							return true;
						}
					}
					else {
						return false;
					}
				}
				else {
					return false;
				}
			}
			else {
				//Tentando associar com o mesmo elemento
				return true;
			}
		}
		
		public static function excluirAssociacao($idCurso, $elemento1, $idElemento1, $elemento2 = NULL, $idElemento2 = NULL, $nomeModuloCurso = NULL) {
			if ($elemento2 == NULL) {
				$strQuery	=	"DELETE FROM associacoes WHERE ((idElemento1 = " . $idElemento1 . " AND elemento1 = '" . $elemento1 . "') OR (idElemento2 = " . $idElemento1 . " AND elemento2 = '" . $elemento1 . "'))";
			}
			else {
				$tabelaElemento2 = '';
				switch ($elemento2) {
					case texto('AREA_AVISOS'):
						$tabelaElemento2	=	'avisos';
						break;
					case texto('AREA_GLOSSARIO'):
						$tabelaElemento2	=	'glossarios';
						break;
					case texto('AREA_BIBLIOGRAFIA'):
						$tabelaElemento2	=	'bibliografias';
						break;
					case texto('AREA_LINKS'):
						$tabelaElemento2	=	'links';
						break;
					case texto('AREA_RECURSOS'):
						$tabelaElemento2	=	'recursos';
						break;
					case $nomeModuloCurso:
						$tabelaElemento2	=	'modulos';
						break;
					case texto('AREA_ATIVIDADES'):
						$tabelaElemento2	=	'atividades';
						break;
					case texto('AREA_FORUM'):
						$tabelaElemento2	=	'foruns';
						break;
				}
				
				if ($tabelaElemento2 != '') {
					$strQuery	=	"DELETE FROM associacoes WHERE ((idElemento1 = " . $idElemento1 . " AND elemento1 = '" . $elemento1 . "' AND idElemento2 = " . $idElemento2 . " AND elemento2 = '" . $tabelaElemento2 . "') OR (idElemento1 = " . $idElemento2 . " AND elemento1 = '" . $tabelaElemento2 . "' AND idElemento2 = " . $idElemento1 . " AND elemento2 = '" . $elemento1 . "'))";
				}
				else {
					return false;
				}
			}
				
			if ($idCurso != null)
				$strQuery	.=	" AND idCurso = " . $idCurso;
			
			if (BancoDados::query($strQuery))
				return true;
			else
				return false;
		}
		
		public function setIdCurso($idCurso) {
			$this->idCurso	=	$idCurso;
		}
		
		public function getIdCurso() {
			return $this->idCurso;
		}
		
		public function setIdElemento($idElemento) {
			$this->idElemento	=	$idElemento;
		}
		
		public function getIdElemento() {
			return $this->idElemento;
		}
		
		public function setElemento($elemento) {
			$this->elemento	=	$elemento;
		}
		
		public function getElemento() {
			return $this->elemento;
		}
		
		public function setAssociacoes($associacoes) {
			$this->associacoes	=	$associacoes;
		}
		
		public function getAssociacoes($exibirCategoriasVazias = false) {
			if (!$exibirCategoriasVazias) {
				$associacoesReturn	=	array();
				foreach ($this->associacoes as $chave => $associacoes) {
					if (!empty($associacoes)) {
						$associacoesReturn[$chave]	=	$associacoes;
					}
				}
			}
			else {
				$associacoesReturn	=	$this->associacoes;
			}
			return $associacoesReturn;
		}
		
		public function setNomeModuloCurso($nomeModuloCurso) {
			$this->nomeModuloCurso	=	$nomeModuloCurso;
		}
		
		public function getNomeModuloCurso() {
			return $this->nomeModuloCurso;
		}
	}
?>